package br.com.financeiro;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import br.com.financeiro.dao.ContaDao;
import br.com.financeiro.model.Conta;

public class ListaContaPeriodoActivity extends Activity {
	ListView ListViewContas;
	TextView titulo;
	TextView periodoReceita;
	ArrayAdapter<String> listAdapter;
	ArrayList<String> contasString = new ArrayList<String>();
	@SuppressLint("SimpleDateFormat")
	SimpleDateFormat format= new SimpleDateFormat("dd/MM/yyyy");

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_lista_conta_periodo);
		ListViewContas = (ListView) findViewById(R.id.ListViewContas);
		
		String tipo = getIntent().getExtras().getString("filtro");
		String dataInicial = getIntent().getExtras().getString("dataInicial");
		String dataFinal = getIntent().getExtras().getString("dataFinal");
		periodoReceita = (TextView) findViewById(R.id.periodoReceita);
		periodoReceita.setText("Entre " + dataInicial + " e " + dataFinal);
		titulo = (TextView) findViewById(R.id.titulo);
		
		Date fim = null;
		Date inicio = null;
		
		try{
			inicio = new Date(format.parse(dataInicial).getTime());			
			fim =  new Date(format.parse(dataFinal).getTime());			
		}catch (Exception e) {
			// TODO: handle exception
		}
		
		if(tipo.equals("Despesa")){
			titulo.setText("Listagem de Despesas");
			ContaDao contaDao = ContaDao.getInstance(getApplicationContext());
			List<Conta> contas = new ArrayList<Conta>();
			try{			
				contas = contaDao.recuperarDespesasPeloPeriodo(inicio, fim);
			}catch (Exception e) {
				// TODO: handle exception
			}
			if(!contas.isEmpty()){	
				exibirLista(contas);
			}
		}else if(tipo.equals("Receita")){
			titulo.setText("Listagem de Receitas");
			ContaDao contaDao = ContaDao.getInstance(getApplicationContext());
			List<Conta> contas = new ArrayList<Conta>();
			
			try{			
				contas = contaDao.recuperarReceitasPeloPeriodo(inicio, fim);
			}catch (Exception e) {
				// TODO: handle exception
			}
			
			if(!contas.isEmpty()){
				exibirLista(contas);
			}
		}else{
			titulo.setText("Fluxo de Caixa");
			ContaDao contaDao = ContaDao.getInstance(getApplicationContext());
			List<Conta> contas = new ArrayList<Conta>();
			contas = contaDao.recuperarPeloPeriodo(inicio, fim);
			try{
				List<Conta> receitas = new ArrayList<Conta>();
		    	List<Conta> despesas = new ArrayList<Conta>();
				receitas = contaDao.recuperarReceitasPeloPeriodo(inicio, fim);
		    	despesas = contaDao.recuperarDespesasPeloPeriodo(inicio, fim);
		    	double receita = contaDao.calcularValor(receitas);
				double despesa = contaDao.calcularValor(despesas);
				double total = receita - despesa;
				periodoReceita.setText("Entre " + dataInicial + " e " + dataFinal + "\nReceita: "+receita+"\nDespesa: "+despesa+"\n Total: "+total);
			}catch (Exception e) {
				// TODO: handle exception
			}
			
			if(!contas.isEmpty()){			
				exibirLista(contas);
			}
		}
	}
	
	public void exibirLista(List<Conta> contas) {
		try {
			String[] from = new String[] { "descricao", "data", "valor", "tipo" };
			int[] to = new int[] { R.id.listDescricao, R.id.listData,
					R.id.listValor, R.id.listPago };

			List<HashMap<String, String>> mapItensLista = new ArrayList<HashMap<String, String>>();
			for (int i = 0; i < contas.size(); i++) {
				HashMap<String, String> mapItens = new HashMap<String, String>();
				String data =null;
				try {
					data = format.format(contas.get(i).getData());	
				} catch (Exception e) {
					// TODO: handle exception
				}
				mapItens.put("descricao", contas.get(i).getDescricao());
				mapItens.put("data",data );
				mapItens.put("valor", String.valueOf(contas.get(i).getValor()));
				mapItens.put("tipo", contas.get(i).getTipo().getDescricao());

				mapItensLista.add(mapItens);
			}

			SimpleAdapter adapter = new SimpleAdapter(this, mapItensLista,
					R.layout.item_listview, from, to);
			ListViewContas.setAdapter(adapter);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.lista_conta_periodo, menu);
		return true;
	}
}